

const http = require('http');
const url = require('url');
const qs = require('querystring');

const path = require('path');
const fs = require('fs');
const fsp = fs.promises;

const { render } = require("./tool/renderSite.js");



const { createServer } = http;

var server = createServer();


server.on("request", function (req, res) {
    if (req.url != "/favicon.ico") {
        console.log("接收前端发送的请求");
        console.log(req.method, req.url);

        var urlInfo = url.parse(req.url, true);
        // console.log(urlInfo);

        var { pathname, query } = urlInfo;
        console.log(query);



        // 路由: (根据对应路由地址渲染不同的内容   -> 路由地址(自己定 /aaa) 响应数据(这是a))
        // 可以通过指定url 快捷访问站点下的某个或某些文件  => 返回响应数据 (根据路径=>快捷访问页面/数据接口)
        // /          根路由  => 渲染主页面
        // /xxx       一级路由 =>  对应路由渲染不同的文件/数据
        // /xxx/xxx   二级路由 => 一级路由的子路由  


        // 站点展示 (前端)
        // 读取url中的路径部分 -> 如果在站点中存在 -> 读取该文件返回给前端(站点搭建)

        // 注意:除了站点中的必须路径之外  -> 空余路径  -> 自定义空余理解的用途 (路由 -> 路径字头)

        // 接口(后端) -> 响应数据 
        // 读取url中的路径部分 -> 自定义路径
        if (render(pathname, res)) {  // true false  => 路径在站点中存在  => 直接渲染

        } else if (pathname == "/data") { //   /data -> 在站点中不存在(不能作为页面展示)  ->  人为赋予/data意义 
            res.end("/data");   // 返回文本
        } else if (req.method.toLowerCase() == "get" && pathname == "/users") { //   /data -> 在站点中不存在(不能作为页面展示)  ->  人为赋予/data意义  -> 返回json数据(users.json)

            var { name = "" } = query;
            var msg = {};
            if (name) {
                fsp.readFile(path.join(__dirname, "./data/users.json"), "utf-8").then(txt => {
                    res.writeHead(200, {
                        "Content-Type": "text/json;charset=utf-8",
                    })
                    var list = JSON.parse(txt);
                    var findData = list.find(v => v.name == name);



                    if (findData) {
                        msg.status = true;
                        msg.message = "OK";
                        msg.data = findData;

                        res.end(JSON.stringify(msg));
                    } else {
                        msg.status = false;
                        msg.message = "该用户不存在";
                        res.end(JSON.stringify(msg))
                    }
                })
            } else {
                fsp.readFile(path.join(__dirname, "./data/users.json"), "utf-8").then(txt => {
                    res.writeHead(200, {
                        "Content-Type": "text/json;charset=utf-8",
                    })

                    var list = JSON.parse(txt);

                    msg.status = true;
                    msg.message = "OK";
                    msg.data = list;

                    res.end(JSON.stringify(msg));
                })
            }

        } else if (req.method.toLowerCase() == "post" && pathname == "/users") {
            console.log("接收前端以post方式传递的数据");

            // 如何获取前端以post方式传递的数据?
            let body = "";
            req.on("data", function (chunk) { // chunk 传递的数据流(数据时文本形式)
                // console.log("chunk", chunk.toString());
                body += chunk;  // 隐式转字符串 和 拼接
            })
            req.on("end", async function () {
                console.log("body", body, typeof body);  // 主体
                console.log("content-type", req.headers['content-type']);

                // 前端传入FormData(application/x-www-form-urlencoded)=>解析参数数据队列     name=xxx&age=xxx  =>
                if (req.headers['content-type'] == "application/x-www-form-urlencoded") {
                    body = qs.parse(body);  // 主体 (解析为对象)
                } else if (req.headers['content-type'] == "application/json") {
                    // json字符串  application/json
                    body = JSON.parse(body);
                }
                console.log(body);   //{name:"老六",age:66}




                // var txt = await fsp.readFile(path.join(__dirname, "./data/users.json"));
                // var list = JSON.parse(txt);

                // var index = list.findIndex(v => v.name === body.name);
                // var msg = {}
                // if (index == -1) {  // 用户不存在  => 追加数据
                //     msg.status = true;
                //     msg.message = "用户不存在,追加数据";
                //     list.push(body);
                // } else {
                //     msg.status = true;
                //     msg.message = "用户存在,替换数据";
                //     list.splice(index, 1, body);
                // }

                // console.log(11111111, msg);
                // fsp.writeFile(path.join(__dirname, "./data/users.json"), JSON.stringify(list), { encoding: "utf-8", flag: "w" }).then(() => {
                //     res.end(JSON.stringify(msg))
                // })


                res.end("1111");



            })

        } else {
            res.end("Not Found");
        }






    } else {
        res.end();
    }
})


server.listen(3000, function () {
    console.log("服务器启动成功localhost:3000");
})

